package com.itheima.game;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.function.BiConsumer;

public class PokerSortTwo {
    //1.准备扑克牌   用牌的价值排序
    //创建牌盒
    static ArrayList<String> list = new ArrayList<>();

    //记录扑克牌的价值
    static HashMap<String, Integer> hm = new HashMap<>();

    //创建静态数据
    static {
        //牌的花色
        String[] colors = {"♠", "♥", "♣", "♦"};
        //牌的数字
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        //把扑克按不同的花色装进牌盒
        for (String color : colors) {//花色
            for (String number : numbers) {//数字
                list.add(color + number);
            }
        }

        //大小王
        list.add(" 大王");
        list.add(" 小王");

        //添加扑克的价值  这里从11还是添加，因为 3 ~ 10 就代表扑克对应的价值, 在遍历排序的时候就判断hm中是否存在，如果存在就去对应的数字，不存在就是当前的值
        hm.put("J", 11);
        hm.put("Q", 12);
        hm.put("K", 13);
        hm.put("A", 14);
        hm.put("2", 15);
        hm.put("大王", 17);
        hm.put("小王", 18);

    }


    public PokerSortTwo() {
        //2.洗牌
        Collections.shuffle(list);

        //3.发牌
        //创建4个集合 分别记录玩家的牌和底牌
        ArrayList<String> landlord = new ArrayList<>();//底牌
        ArrayList<String> player1 = new ArrayList<>();//玩家1
        ArrayList<String> player2 = new ArrayList<>();//玩家2
        ArrayList<String> player3 = new ArrayList<>();//玩家3


        for (int i = 0; i < list.size(); i++) {
            //前三张地主牌
            if (i < 3) {
                landlord.add(list.get(i));
            } else if (i % 3 == 1) {
                player1.add(list.get(i));
            } else if (i % 3 == 2) {
                player2.add(list.get(i));
            } else {
                player3.add(list.get(i));
            }
        }

        //4.看牌
        order(landlord);
        order(player1);
        order(player2);
        order(player3);
        lockPoker(landlord, "底牌");
        lockPoker(player1, "玩家1");
        lockPoker(player2, "玩家2");
        lockPoker(player3, "玩家3");
    }

    //排序方法
    public void order(ArrayList<String> list) {
        list.sort(new Comparator<String>() {
            //sort()方法的底层是 插入排序 + 二分查找 实现
            @Override
            public int compare(String o1, String o2) {
                //比较大小
                //负数在左边
                //正数在右边
                //等于0比较花色

                String color1 = o1.substring(0, 1);
                Integer value1 = getValue(o1);

                String color2 = o2.substring(0, 1);
                Integer value2 = getValue(o2);

                int i = value1 - value2;

                return i == 0 ? color1.compareTo(color2) : i;
            }
        });
    }

    public int getValue(String poker) {//判断每张扑克牌的价值
        String substring = poker.substring(1);
        //判断截取的扑克牌的价值在hm集合中是否存在
        if (hm.containsKey(substring)) {//存在就获取价值返回
            return hm.get(substring);
        } else {//不存在
            //就把截取的值做字符串转Int
            return Integer.parseInt(substring);
        }
    }

    /**
     * @param list 玩家的派克
     * @param name 玩家名称
     */
    public static void lockPoker(ArrayList<String> list, String name) {
        System.out.print(name + ": ");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + ", ");
        }
        System.out.println();
    }
}
